package com.majun.web;

import com.majun.service.SimpleService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


/**
 *
 * 测试的controller，事务失效controller
 * @author majun
 * @date 2025/04/16
 */
@RestController
@RequestMapping("/invalid")
@Slf4j
public class InvalidApiController {


    @Autowired
    private SimpleService simpleService;


    /**
     * @Description: 没有测试，这种写法编译不过去。 但重要的是使用private导致事务失效
     * @Params:
     * @Return:
     * @Author: Mr.myq
     * @Date: 2022/11/716:25
     */
    @GetMapping("add")
    public void add() {
        // 测试可直接注入实现类
//        simpleService.add();
    }


    /**
     * @Description: TryCatch 事务失效
     * @Params:
     * @Return:
     * @Author: Mr.myq
     * @Date: 2022/11/716:26
     */
    @GetMapping("addTryCatch")
    public void addTryCatch() {
        simpleService.addTryCatch();
    }


    /**
     * @Description: try-runtimeException，but throws  Exception
     * @Params:
     * @Return:
     * @Author: Mr.myq
     * @Date: 2022/11/716:26
     */
    @GetMapping("addTryRuntimeException")
    public void addTryRuntimeException() throws Exception {
        simpleService.addTryRuntimeException();
    }


    /**
     * @Description: 开启新的线程 事务失效
     * @Params:
     * @Return:
     * @Author: Mr.myq
     * @Date: 2022/11/716:26
     */
    @GetMapping("addNewThread")
    public void addNewThread() {
        simpleService.addNewThread();
    }

    /**
     * @Description: 使用new导致事务失效
     * @Date: 2022/11/716:26
     */
    @GetMapping("addNew")
    public void addNew() {
        simpleService.addNew();
    }

    /**
     * @Description: 使用内部方法调用导致事务失效
     * @Date: 2022/11/716:26
     */
    @GetMapping("addInnerMethodERROR")
    public void addInnerMethodERROR() {
        simpleService.addInnerMethodERROR();
    }


}
